﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MonopolyRandy
{
    public class Speler
    {
        // Properties
        private string _naam;
        internal Pion _pion;
        private int _saldo;
        private Bord _bord;
        public bool LangsStartGekomen { get; set; }

        // Constructor
        public Speler(string naam, int saldo, Bord bord)
        {
            _naam = naam;
            _saldo = saldo;
            _bord = bord;
            MaakPion();
        }

        // Method(s)
        private void MaakPion()
        {
            _pion = new Pion(_bord.Velden[0], false);
        }

        public string GetNaam()
        {
            return _naam;
        }

        public Pion GetPion()
        {
            return _pion;
        }

        public int GetSaldo()
        {
            return _saldo;
        }

        public int BetaalBedrag(int bedrag)
        {
            _saldo -= bedrag;
            return _saldo;
        }

        public int OntvangBedrag(int bedrag)
        {
            _saldo += bedrag;
            return _saldo;
        }

        public Veld GetPionVeld()
        {
            return _pion.GetVeld();
        }

        public void VerzetPion(int aantalVelden)
        {
            LangsStartGekomen = false;

            // Wat is het veld waar de pion nu op staat?
            var huidigVeld = _pion.GetVeld();

            // bepaal positie waar de pion naar toe moet
            var nieuwVeld = _bord.GetHuidigVeldPlusAantalOgen(huidigVeld, aantalVelden);

            _pion.SetVeld(nieuwVeld);
            if (nieuwVeld.GetVeldPositie() < huidigVeld.GetVeldPositie())
            {
                LangsStartGekomen = true;
            }
        }

        public void KoopEigendomsbewijs(Eigendomsbewijs eigendomsbewijs)
        {
            eigendomsbewijs.SetEigenaar(this);
            BetaalBedrag(eigendomsbewijs.GetKoopbedrag());
        }

        public void GaDirectNaarDeGevangenis(Veld gevangenis)
        {
            _pion.SetVeld(gevangenis);
            _pion.ZitVast = true;
        }
    }
}
